home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / share / aclocal / longlong.m4 < prev    next >
Encoding:
M4 Source File  |  2008-03-13  |  4.0 KB  |  110 lines

  1. # longlong.m4 serial 13
  2. dnl Copyright (C) 1999-2007 Free Software Foundation, Inc.
  3. dnl This file is free software; the Free Software Foundation
  4. dnl gives unlimited permission to copy and/or distribute it,
  5. dnl with or without modifications, as long as this notice is preserved.
  6.  
  7. dnl From Paul Eggert.
  8.  
  9. # Define HAVE_LONG_LONG_INT if 'long long int' works.
  10. # This fixes a bug in Autoconf 2.61, but can be removed once we
  11. # assume 2.62 everywhere.
  12.  
  13. # Note: If the type 'long long int' exists but is only 32 bits large
  14. # (as on some very old compilers), HAVE_LONG_LONG_INT will not be
  15. # defined. In this case you can treat 'long long int' like 'long int'.
  16.  
  17. AC_DEFUN([AC_TYPE_LONG_LONG_INT],
  18. [
  19.   AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
  20.     [AC_LINK_IFELSE(
  21.        [_AC_TYPE_LONG_LONG_SNIPPET],
  22.        [dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
  23.     dnl If cross compiling, assume the bug isn't important, since
  24.     dnl nobody cross compiles for this platform as far as we know.
  25.     AC_RUN_IFELSE(
  26.       [AC_LANG_PROGRAM(
  27.          [[@%:@include <limits.h>
  28.            @%:@ifndef LLONG_MAX
  29.            @%:@ define HALF \
  30.             (1LL << (sizeof (long long int) * CHAR_BIT - 2))
  31.            @%:@ define LLONG_MAX (HALF - 1 + HALF)
  32.            @%:@endif]],
  33.          [[long long int n = 1;
  34.            int i;
  35.            for (i = 0; ; i++)
  36.          {
  37.            long long int m = n << i;
  38.            if (m >> i != n)
  39.              return 1;
  40.            if (LLONG_MAX / 2 < m)
  41.              break;
  42.          }
  43.            return 0;]])],
  44.       [ac_cv_type_long_long_int=yes],
  45.       [ac_cv_type_long_long_int=no],
  46.       [ac_cv_type_long_long_int=yes])],
  47.        [ac_cv_type_long_long_int=no])])
  48.   if test $ac_cv_type_long_long_int = yes; then
  49.     AC_DEFINE([HAVE_LONG_LONG_INT], 1,
  50.       [Define to 1 if the system has the type `long long int'.])
  51.   fi
  52. ])
  53.  
  54. # Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
  55. # This fixes a bug in Autoconf 2.61, but can be removed once we
  56. # assume 2.62 everywhere.
  57.  
  58. # Note: If the type 'unsigned long long int' exists but is only 32 bits
  59. # large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
  60. # will not be defined. In this case you can treat 'unsigned long long int'
  61. # like 'unsigned long int'.
  62.  
  63. AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
  64. [
  65.   AC_CACHE_CHECK([for unsigned long long int],
  66.     [ac_cv_type_unsigned_long_long_int],
  67.     [AC_LINK_IFELSE(
  68.        [_AC_TYPE_LONG_LONG_SNIPPET],
  69.        [ac_cv_type_unsigned_long_long_int=yes],
  70.        [ac_cv_type_unsigned_long_long_int=no])])
  71.   if test $ac_cv_type_unsigned_long_long_int = yes; then
  72.     AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], 1,
  73.       [Define to 1 if the system has the type `unsigned long long int'.])
  74.   fi
  75. ])
  76.  
  77. # Expands to a C program that can be used to test for simultaneous support
  78. # of 'long long' and 'unsigned long long'. We don't want to say that
  79. # 'long long' is available if 'unsigned long long' is not, or vice versa,
  80. # because too many programs rely on the symmetry between signed and unsigned
  81. # integer types (excluding 'bool').
  82. AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
  83. [
  84.   AC_LANG_PROGRAM(
  85.     [[/* Test preprocessor.  */
  86.       #if ! (-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
  87.         error in preprocessor;
  88.       #endif
  89.       #if ! (18446744073709551615ULL <= -1ull)
  90.         error in preprocessor;
  91.       #endif
  92.       /* Test literals.  */
  93.       long long int ll = 9223372036854775807ll;
  94.       long long int nll = -9223372036854775807LL;
  95.       unsigned long long int ull = 18446744073709551615ULL;
  96.       /* Test constant expressions.   */
  97.       typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
  98.              ? 1 : -1)];
  99.       typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
  100.              ? 1 : -1)];
  101.       int i = 63;]],
  102.     [[/* Test availability of runtime routines for shift and division.  */
  103.       long long int llmax = 9223372036854775807ll;
  104.       unsigned long long int ullmax = 18446744073709551615ull;
  105.       return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
  106.           | (llmax / ll) | (llmax % ll)
  107.           | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
  108.           | (ullmax / ull) | (ullmax % ull));]])
  109. ])
  110.